const db = require('../database/index');
const express = require('express');

// 导入生成token的模块
const jwt = require('jsonwebtoken');
// 导入全局配置文件
const config = require('../config');

//管理员登陆
exports.logAdmin = (req, res) => {

  const adminInfo = req.body;

  console.log("请求:管理员登陆!!");
  console.log(req.body);

  // 合法性校验
  if (!adminInfo.adminaccount || !adminInfo.password) {
    return res.send({ status: 1, msg: '用户名或密码不能为空' });
  }

  const sql = 'select * from admin where AdminAccount=?';

  db.query(sql, [req.body.adminaccount], (err, results) => {

    console.log('管理员result');
    console.log(results[0]);

    if (err) return res.send({ status: 1, msg: err.message });
    // 管理名不存在
    if (results.length === 0) {
      return res.send({ status: 1, msg: '管理名不存在' });
    }

    // 密码错误
    const user = results[0];

    if (user.AdminPWD !== adminInfo.password) {
      return res.send({ status: 1, msg: '密码错误' });
    }

    // 登陆成功
    //加管理员token
    //生成token
    const admin = {...results[0],AdminPWD:''}

    // 生成token,对用户信息加密
    const tokenStr = jwt.sign(admin,config.jwtSecretKey,{expiresIn:config.expiresIn});
    console.log('有管理员登录,token为:'+tokenStr);

    // 调用send方法,将token发送给客户端
    res.send({status:0,message:'登录成功',token:'Bearer '+tokenStr});

  });
};

// 查询用户列表
exports.getUserList = (req, res) => {

  console.log("管理员请求:查询所有用户列表!!");

  const { name } = req.query; // 获取查询参数中的 name
  let sql = 'SELECT * FROM user'; // 基础查询语句

  // 如果有 name 参数，添加 WHERE 条件
  if (name) {
    sql += ` WHERE UserName LIKE '%${name}%'`; // 模糊查询
  }

  console.log('执行的 SQL:', sql); // 打印 SQL 语句，方便调试

  // 执行 SQL 查询
  db.query(sql, (err, results) => {
    if (err) {
      console.error('SQL 查询失败:', err.message); // 打印错误日志
      return res.send({ status: 1, msg: err.message }); // 返回错误信息
    }
    // console.log('查询结果:', results); // 打印查询结果，方便调试
    res.send({ status: 0, msg: '查询成功', data: results }); // 返回查询结果
  });
};

// 删除用户
exports.deleteUser = (req, res) => {

  console.log("管理员请求:删除用户!!");

  const id = req.params.id;
  console.log('删除操作：id=', id); // 删除操作
  // 输入验证
  if (!id || isNaN(id)) {
    return res.send({ status: 1, msg: 'id不合法' });
  }

  const sql = 'DELETE FROM user WHERE UserID = ?';
  db.query(sql, [id], (err, results) => {
    if (err) {
      console.error('SQL 删除失败:', err.message);
      return res.send({ status: 1, msg: err.message });
    }
    if (results.affectedRows === 0) {
      return res.send({ status: 1, msg: '用户不存在' });
    }
    res.send({ status: 0, msg: '删除成功' });
  });

};

// 修改用户信息
exports.updateUser = (req, res) => {

  console.log("管理员请求:修改用户信息!!");

  const id = req.params.id; // 从 URL 参数中获取 id
  const user = req.body; // 从请求体中获取用户信息
  console.log('修改操作：id=', id); // 打印日志
  console.log('修改操作：用户信息=', user); // 打印日志

  // 输入验证
  if (!id || isNaN(id)) {
    return res.send({ status: 1, msg: '用户ID不合法' });
  }
  if (!user.name || !user.password) {
    return res.send({ status: 1, msg: '用户名和密码不能为空' });
  }

  // 准备 SQL 语句和参数
  const sql = 'UPDATE user SET UserName = ?, UserPWD = ?, UserPhone = ? WHERE UserID = ?';
  const params = [user.name, user.password, user.userphone, id]; // 确保参数顺序与 SQL 语句中的占位符匹配

  // 执行 SQL 语句
  db.query(sql, params, (err, results) => {
    if (err) {
      console.error('SQL 更新失败:', err.message);
      return res.send({ status: 1, msg: err.message });
    }
    if (results.affectedRows === 0) {
      return res.send({ status: 1, msg: '用户不存在' });
    }
    res.send({ status: 0, msg: '修改成功' });
  });
};


//根据用户id获取博客列表
exports.getBlogList = (req, res) => {

  console.log("管理员请求:根据用户id获取博客列表!!");

  const sql = 'SELECT * FROM post WHERE Post_UserID = ?';

  db.query(sql, [req.params.id], (err, results) => {
    if (err) {
      console.error('获取用户博客失败:', err.message);
      return res.send({ status: 1, msg: '获取用户博客失败' });
    }
    res.send({ status: 0, msg: '获取成功', data: results });
  });
};


// 根据用户id获取评论列表
exports.getCommentList = (req, res) => {

  console.log("管理员请求:根据用户id获取评论列表!!");

  const id = req.params.id;
  const sql = `
    SELECT 
      comment.CommentID,
      comment.CommentContent,
      comment.Comment_Date,
      comment.Com_UserID,
      comment.Com_PostID,
      post.PostTitle
    FROM comment
    LEFT JOIN post ON comment.Com_PostID = post.PostID
    WHERE comment.Com_UserID = ?
  `;
  db.query(sql, [id], (err, results) => {
    if (err) {
      console.error('获取用户评论失败:', err.message);
      return res.send({ status: 1, msg: '获取用户评论失败' });
    }
    res.send({ status: 0, msg: '获取成功', data: results });
  });
};


//删除博客
exports.delPost = (req, res) => {

  console.log("管理员请求:删除博客")

  const sql = 'DELETE FROM post WHERE PostID = ?';

  db.query(sql, [req.params.id], (err, results) => {

    if (err) {
      console.error('删除博客失败:', err.message);
      return res.send({ status: 1, msg: 'sql执行失败' });
    }

    if(results.affectedRows !== 1) return res.send({status: 1, msg: '删除博客失败'})

    res.send({ status: 0, msg: '删除成功' });

  });
};


// 获取所有博客信息以及博客的分类、标签、点赞量和浏览量
exports.getAllPost = (req, res) => {
  
  console.log('请求：获取所有博客信息以及博客的分类、标签、点赞量和浏览量');

  // 获取查询参数中的 title
  const { title } = req.query;

  // 基础 SQL 查询语句
  let sql = `SELECT 
    p.*, 
    u.UserName,
    GROUP_CONCAT(DISTINCT t.TagName ORDER BY t.TagName SEPARATOR ',') AS TagNames,
    GROUP_CONCAT(DISTINCT c.ColumnName ORDER BY c.ColumnName SEPARATOR ',') AS ColumnNames,
    COUNT(DISTINCT l.ThumbID) AS LikeCount
    FROM post p
    LEFT JOIN user u ON p.Post_UserID = u.UserID
    LEFT JOIN post_tag_relation ptr ON p.PostID = ptr.PT_PostID
    LEFT JOIN tag t ON ptr.PT_TagID = t.TagID
    LEFT JOIN post_column_relation pcr ON p.PostID = pcr.PC_PostID
    LEFT JOIN column_info c ON pcr.PC_ColumnID = c.ColumnID
    LEFT JOIN thumbs l ON p.PostID = l.Th_PostID`;

  // 如果有 title 参数，添加 WHERE 条件
  if (title) {
    sql += ` WHERE p.PostTitle LIKE '%${title}%'`; // 模糊查询
  }
 
  // 添加 GROUP BY 子句
  sql += ` GROUP BY p.PostID`;

  console.log('执行的 SQL:', sql); // 打印 SQL 语句，方便调试

  // 执行 SQL 查询
  db.query(sql, (err, results) => {
    if (err) {
      console.error('SQL 查询失败:', err.message); // 打印错误日志
      return res.send({ status: 1, message: err.message }); // 返回错误信息
    }

    // 查询结果为空
    if (results.length === 0) {
      return res.send({ status: 1, message: '未找到相关博客' });
    }

    // 查询成功
    res.send({ status: 0, message: '获取博客列表成功', data: results });
  });
};


// 获取评论列表
exports.getcomment = (req, res) => {
  console.log('请求:获取所有评论列表');

  // 获取查询参数中的 content
  const { content } = req.query;

  // 基础 SQL 查询语句
  let sql = `SELECT comment.*, user.userName, post.PostTitle 
             FROM comment  
             LEFT JOIN user ON comment.Com_UserID = user.UserID 
             JOIN post ON comment.Com_PostID = post.PostID`;

  // 如果有 content 参数，添加 WHERE 条件
  if (content) {
    sql += ` WHERE comment.CommentContent LIKE '%${content}%'`; // 模糊查询
  }

  console.log('执行的 SQL:', sql); // 打印 SQL 语句，方便调试

  // 执行 SQL 查询
  db.query(sql, (err, results) => {
    // sql执行失败
    if (err) {
      console.error('SQL 查询失败:', err.message); // 打印错误日志
      return res.send({ status: 1, message: 'SQL 执行失败' });
    }

    // 该博客没有评论
    if (results.length === 0) {
      return res.send({ status: 1, message: '未找到相关评论' });
    }

    // 获取成功
    res.send({
      status: 0,
      message: '获取评论成功',
      data: results,
    });
  });
};
